import js from '@eslint/js';
import globals from 'globals';
import tseslint from 'typescript-eslint';
import pluginVue from 'eslint-plugin-vue';
import { defineConfig } from 'eslint/config';


export default defineConfig([
  {
    files: ['**/*.{js,mjs,cjs,ts,vue}'],
    //添加在这里
    rules: {
      '@typescript-eslint/no-unused-expressions': [
        'error',
        {allowShortCircuit: true, allowTernary: false, allowTaggedTemplates: false}
      ],
      'semi': ['error', 'always'], // 强制分号
      'no-multiple-empty-lines': 'warn', // 禁止出现多行空行
      'no-useless-return': 'warn', // 禁止不必要的return语句
      'no-empty': 'warn', // 禁止出现空语句块
      'no-extra-parens': 'warn', // 禁止不必要的括号
      'no-func-assign': 'warn', // 禁止对Function声明重新赋值
      'no-else-return': 'warn', // 禁止if语句中return语句之后有else块
      'no-empty-function': 'warn', // 禁止出现空的函数块
      'no-lone-blocks': 'warn', // 禁用不必要的嵌套块
      'no-multi-spaces': 'warn', // 禁止使用多个空格
      'no-redeclare': 'warn', // 禁止多次声明同一变量
      'no-return-assign': 'warn', // 禁止在return语句中使用赋值语句
      'no-return-await': 'warn', // 禁用不必要的[return/await]
      'no-self-compare': 'warn', // 禁止自身比较表达式
      'no-useless-catch': 'warn', // 禁止不必要的catch子句
      'no-mixed-spaces-and-tabs': 'warn', // 禁止空格和tab的混合缩进
      'no-trailing-spaces': 'warn', // 禁止一行结束后面不要有空格
      'no-var': 'warn', // 禁止出现var用let和const代替
      'dot-notation': 'warn', // 要求尽可能地使用点号
      'default-case': 'warn', // 要求switch语句中有default分支
      'eqeqeq': 'warn', // 要求使用 === 和 !==
      'curly': 'warn', // 要求所有控制语句使用一致的括号风格
      'space-before-blocks': 'warn', // 要求在块之前使用一致的空格
      'space-in-parens': 'warn', // 要求在圆括号内使用一致的空格
      'space-infix-ops': 'warn', // 要求操作符周围有空格
      'space-unary-ops': 'warn', // 要求在一元操作符前后使用一致的空格
      'switch-colon-spacing': 'warn', // 要求在switch的冒号左右有空格
      'arrow-spacing': 'warn', // 要求箭头函数的箭头前后使用一致的空格
      'array-bracket-spacing': 'warn', // 要求数组方括号中使用一致的空格
      'brace-style': 'warn', // 要求在代码块中使用一致的大括号风格
      'camelcase': 'warn', // 要求使用骆驼拼写法命名约定
      'quotes': ['warn', 'single', 'avoid-escape'], // 要求统一使用单引号符号
      'vue/max-attributes-per-line': ['warn', { singleline: 5 }],
      // 取消关闭标签不能自闭合的限制设置
      'vue/html-self-closing': ['error', {
        'html': {
          'void': 'always',
          'normal': 'never',
          'component': 'always'
        },
        'svg': 'always',
        'math': 'always'
      }],
      // 要求html标签的缩进为需要4个空格
      'vue/html-indent': ['warn', 2, {
        'attribute': 1,
        'baseIndent': 1,
        'closeBracket': 0,
        'alignAttributesVertically': true,
        'ignores': []
      }],
      'vue/no-mutating-props': 'off'
    }
  },
  { files: ['**/*.{js,mjs,cjs,ts,vue}'], plugins: { js }, extends: ['js/recommended'] },
  { files: ['**/*.{js,mjs,cjs,ts,vue}'], languageOptions: { globals: globals.browser } },
  tseslint.configs.recommended,
  pluginVue.configs['flat/essential'],
  { files: ['**/*.vue'], languageOptions: { parserOptions: { parser: tseslint.parser } } },
]);
